{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# 变量\n",
    "\n",
    "JavaScript 中的变量是弱类型的，意思是变量可以保存任何类型的数据。因此，在 JavaScript 中，变量仅仅是一个用于保存值的占位符而已。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 定义变量的方式\n",
    "\n",
    "常用`var`关键字后跟变量名定义。除了`var`之外，还可以通过`let`、`const`定义。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "scrolled": true,
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2020\n",
      "1999年 这个变量由数字类型变为字符串类型。\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "undefined"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "var year = 2020;\n",
    "console.log(year);\n",
    "\n",
    "year = '1999年';\n",
    "console.log(year, '这个变量由数字类型变为字符串类型。');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## 变量名\n",
    "\n",
    "变量名，应该是符合要求的标识符，所谓**标识符（identifier）**，就是代码中用来标识变量、函数、或属性的字符序列。\n",
    "\n",
    "在JavaScript中，标识符只能包含字母或数字或下划线（“`_`”）或美元符号（“`$`”），**且不能以数字开头**。标识符与字符串不同之处在于字符串是数据，而标识符是代码的一部分。在 JavaScript 中，无法将标识符转换为字符串，但有时可以将字符串解析为标识符。\n",
    "\n",
    "不推荐使用中文字符或扩展的ASC字符作为标识符。习惯上标识符使用驼峰命名。如`myCar`，而不是`my_car`。\n",
    "\n",
    "不能把[关键字、保留字](keywords.ipynb)以及`true` `false` `null`作标识符。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "Invalid or unexpected token",
     "output_type": "error",
     "traceback": [
      "evalmachine.<anonymous>:1",
      "var 3d",
      "    ^",
      "",
      "SyntaxError: Invalid or unexpected token",
      "    at new Script (vm.js:99:7)",
      "    at createScript (vm.js:249:10)",
      "    at Object.runInThisContext (vm.js:297:10)",
      "    at run ([eval]:1054:15)",
      "    at onRunRequest ([eval]:888:18)",
      "    at onMessage ([eval]:848:13)",
      "    at process.emit (events.js:315:20)",
      "    at emit (internal/child_process.js:881:12)",
      "    at processTicksAndRejections (internal/process/task_queues.js:85:21)"
     ]
    }
   ],
   "source": [
    "var 3d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "false\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "undefined"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "var fasle = 5\n",
    "console.log(false)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "Unexpected token 'var'",
     "output_type": "error",
     "traceback": [
      "evalmachine.<anonymous>:1",
      "var var = 5;",
      "    ^^^",
      "",
      "SyntaxError: Unexpected token 'var'",
      "    at new Script (vm.js:88:7)",
      "    at createScript (vm.js:263:10)",
      "    at Object.runInThisContext (vm.js:311:10)",
      "    at run ([eval]:1054:15)",
      "    at onRunRequest ([eval]:888:18)",
      "    at onMessage ([eval]:848:13)",
      "    at process.emit (events.js:311:20)",
      "    at emit (internal/child_process.js:876:12)",
      "    at processTicksAndRejections (internal/process/task_queues.js:85:21)"
     ]
    }
   ],
   "source": [
    "var\n",
    "var = 5;"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 变量的作用域\n",
    "\n",
    "与大多数编程语言不同，`var`声明的变量，没有块级作用域，在函数中的`var`声明，其作用域是函数体。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a 10\n"
     ]
    },
    {
     "ename": "ReferenceError",
     "evalue": "a is not defined",
     "output_type": "error",
     "traceback": [
      "evalmachine.<anonymous>:8",
      "console.log(a,i)",
      "            ^",
      "",
      "ReferenceError: a is not defined",
      "    at evalmachine.<anonymous>:8:13",
      "    at Script.runInThisContext (vm.js:120:20)",
      "    at Object.runInThisContext (vm.js:311:38)",
      "    at run ([eval]:1054:15)",
      "    at onRunRequest ([eval]:888:18)",
      "    at onMessage ([eval]:848:13)",
      "    at process.emit (events.js:311:20)",
      "    at emit (internal/child_process.js:876:12)",
      "    at processTicksAndRejections (internal/process/task_queues.js:85:21)"
     ]
    }
   ],
   "source": [
    "function test() {\n",
    "    for (var i = 0; i < 10; i++) {\n",
    "        var a = 'a';\n",
    "    }\n",
    "    console.log(a, i);\n",
    "}\n",
    "test();\n",
    "console.log(a, i)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从上面代码的运行结果可以看到，定义在块级区域（for循环）中的变量`i`和`a`，可在函数内部中调用。但是在函数外部，不能调用。`var` 定义的变量将成为其作用域中的**局部变量**。省略`var`操作符，就会创建一个全局变量。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "这是一个全局变量\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "undefined"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "function testGlobalVariable() {\n",
    "    message = '这是一个全局变量';\n",
    "}\n",
    "\n",
    "testGlobalVariable();\n",
    "console.log(message)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "虽然省略`var`操作符，可以定义全局变量，但不建议在局部作用域中（如函数体）定义全局变量，会引起不必要的混乱。在[**严格模式**](strict.ipynb)下，给未经声明的变量赋值会导致错误。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "ename": "ReferenceError",
     "evalue": "message2 is not defined",
     "output_type": "error",
     "traceback": [
      "evalmachine.<anonymous>:3",
      "    message2 = '这是一个全部变量';",
      "             ^",
      "",
      "ReferenceError: message2 is not defined",
      "    at testGlobalVariable (evalmachine.<anonymous>:3:14)",
      "    at evalmachine.<anonymous>:6:1",
      "    at Script.runInThisContext (vm.js:120:20)",
      "    at Object.runInThisContext (vm.js:311:38)",
      "    at run ([eval]:1054:15)",
      "    at onRunRequest ([eval]:888:18)",
      "    at onMessage ([eval]:848:13)",
      "    at process.emit (events.js:311:20)",
      "    at emit (internal/child_process.js:876:12)",
      "    at processTicksAndRejections (internal/process/task_queues.js:85:21)"
     ]
    }
   ],
   "source": [
    "function testGlobalVariable() {\n",
    "    \"use strict\";\n",
    "    message2 = '这是一个全部变量';\n",
    "}\n",
    "\n",
    "testGlobalVariable();\n",
    "console.log(message2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 变量的过度共享\n",
    "\n",
    "使用var方式声明的变量，在其作用域中都是有效的。比如：\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timeout {\n",
       "  _idleTimeout: 1000,\n",
       "  _idlePrev: [TimersList],\n",
       "  _idleNext: [Timeout],\n",
       "  _idleStart: 5119,\n",
       "  _onTimeout: [Function],\n",
       "  _timerArgs: undefined,\n",
       "  _repeat: null,\n",
       "  _destroyed: false,\n",
       "  [Symbol(refed)]: true,\n",
       "  [Symbol(asyncId)]: 70,\n",
       "  [Symbol(triggerId)]: 65\n",
       "}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for (var i = 0; i < 3; i++) {\n",
    "    setTimeout(function() {\n",
    "        console.log(i)\n",
    "    }, 1000);\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上述循环本身及三次回调均共享唯一的变量 `i` 。当循环结束执行时，`i` 的值为3。所以当第一个回调执行时，调用的 `i` 当让也为 3 了。如果要避免上述问题，就需要使用`let`关键字定义变量：\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Timeout {\n",
       "  _idleTimeout: 1000,\n",
       "  _idlePrev: [TimersList],\n",
       "  _idleNext: [Timeout],\n",
       "  _idleStart: 5126,\n",
       "  _onTimeout: [Function],\n",
       "  _timerArgs: undefined,\n",
       "  _repeat: null,\n",
       "  _destroyed: false,\n",
       "  [Symbol(refed)]: true,\n",
       "  [Symbol(asyncId)]: 79,\n",
       "  [Symbol(triggerId)]: 74\n",
       "}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "for (let i = 0; i < 3; i++) {\n",
    "    setTimeout(function() {\n",
    "        console.log(i)\n",
    "    }, 1000);\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## let\n",
    "\n",
    "以下是 [MDN](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/let) 中对`let`的说明：\n",
    "\n",
    "> `let`允许你声明一个作用域被限制在块级中的变量、语句或者表达式。与 `var` 关键字不同的是， `var`声明的变量只能是全局或者整个函数块的。 `var` 和 `let` 的不同之处在于后者是在编译时才初始化。就像`const`一样，`let`不会在全局声明时（在最顶部的范围）创建`window`对象的属性。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2\n",
      "0\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "undefined"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "let a1 = 0;\n",
    "\n",
    "function test() {\n",
    "    let a1 = 2;\n",
    "    console.log(a1);\n",
    "}\n",
    "test();\n",
    "console.log(a1);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "拿上例来说，如果一个`for (let...)`循环执行多次并且循环保持了一个闭包，那么每个闭包将捕捉一个循环变量的不同值作为副本，而不是所有闭包都捕捉循环变量的同一个值。这种情况适用于现有的三种循环方式：for-of、for-in、以及传统的用分号分隔的类C循环。\n",
    "\n",
    "总体来说，let与var的区别在于：\n",
    "\n",
    "* `let`声明的变量拥有块级作用域。`var`没有块级作用域。\n",
    "* `let`声明的全局变量不是全局对象的属性。它们只存在于一个不可见的块的作用域中，这个块理论上是Web页面中运行的所有JS代码的外层块。而用var声明的变量，在浏览器中，可以通过`window.变量名`的方式直接访问。\n",
    "* 形如`for (let x...)`的循环在每次迭代时都为x创建新的绑定。\n",
    "* 用`let`重定义变量会抛出一个语法错误（SyntaxError）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "Identifier 'city' has already been declared",
     "output_type": "error",
     "traceback": [
      "evalmachine.<anonymous>:2",
      "let city = 'New York';",
      "    ^",
      "",
      "SyntaxError: Identifier 'city' has already been declared",
      "    at new Script (vm.js:88:7)",
      "    at createScript (vm.js:263:10)",
      "    at Object.runInThisContext (vm.js:311:10)",
      "    at run ([eval]:1054:15)",
      "    at onRunRequest ([eval]:888:18)",
      "    at onMessage ([eval]:848:13)",
      "    at process.emit (events.js:311:20)",
      "    at emit (internal/child_process.js:876:12)",
      "    at processTicksAndRejections (internal/process/task_queues.js:85:21)"
     ]
    }
   ],
   "source": [
    "let city = '北京';\n",
    "let city = 'New York';"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## const\n",
    "\n",
    "const 就是用来定义常量的，这个常量需要初始化，且不应该被修改。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "Missing initializer in const declaration",
     "output_type": "error",
     "traceback": [
      "evalmachine.<anonymous>:1",
      "const site;",
      "      ^^^^",
      "",
      "SyntaxError: Missing initializer in const declaration",
      "    at new Script (vm.js:88:7)",
      "    at createScript (vm.js:263:10)",
      "    at Object.runInThisContext (vm.js:311:10)",
      "    at run ([eval]:1054:15)",
      "    at onRunRequest ([eval]:888:18)",
      "    at onMessage ([eval]:848:13)",
      "    at process.emit (events.js:311:20)",
      "    at emit (internal/child_process.js:876:12)",
      "    at processTicksAndRejections (internal/process/task_queues.js:85:21)"
     ]
    }
   ],
   "source": [
    "const site;"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "ename": "TypeError",
     "evalue": "Assignment to constant variable.",
     "output_type": "error",
     "traceback": [
      "evalmachine.<anonymous>:2",
      "site = 'books.yangzh.cn';",
      "     ^",
      "",
      "TypeError: Assignment to constant variable.",
      "    at evalmachine.<anonymous>:2:6",
      "    at Script.runInThisContext (vm.js:120:20)",
      "    at Object.runInThisContext (vm.js:311:38)",
      "    at run ([eval]:1054:15)",
      "    at onRunRequest ([eval]:888:18)",
      "    at onMessage ([eval]:848:13)",
      "    at process.emit (events.js:311:20)",
      "    at emit (internal/child_process.js:876:12)",
      "    at processTicksAndRejections (internal/process/task_queues.js:85:21)"
     ]
    }
   ],
   "source": [
    "const site = 'yangzh.cn';\n",
    "site = 'books.yangzh.cn';"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "const声明创建一个常量，其作用域可以是全局或本地声明的块。 与var变量不同，全局常量不会变为窗口对象的属性。\n",
    "\n",
    "const声明创建一个值的只读引用。但这并不意味着它所持有的值是不可变的，只是变量标识符不能重新分配。例如，在引用内容是对象的情况下，这意味着可以改变对象的内容（例如，其参数）。\n",
    "\n",
    "一个常量不能和它所在作用域内的其他变量或函数拥有相同的名称。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "const MY_ARRAY = [];\n",
    "MY_ARRAY.push('A');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'xiaoma'"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "const person = {\n",
    "    name: 'ma',\n",
    "    age: 60\n",
    "}\n",
    "person.age += 1;\n",
    "person.age;\n",
    "person.son = 'xiaoma';"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 基本类型和引用类型的值\n",
    "\n",
    "变量的值可能是类似于数字、字符串之类的**基本类型值**或者是由多个基本类型值构成的**引用类型值**（如对象）。\n",
    "\n",
    "### 变量的属性\n",
    "\n",
    "\n",
    "#### 基本类型值\n",
    "\n",
    "将一个值赋值给对象时，解析器必须确定这个值是基本类型值（Undefined、Null、Boolean、Number和String）还是引用类型。如果变量值是上述5种基本类型值，则可以操作保存在变量中的实际的值。\n",
    "\n",
    "我们**不能给基本类型的值添加属性和方法**，尽管这样做没有错误提示。例如："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "undefined\n"
     ]
    }
   ],
   "source": [
    "let country = '中国';\n",
    "country.age = 5000;\n",
    "console.log(country.age);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 引用类型值\n",
    "\n",
    "与被赋予基本类型值得变量不同，当一个变量被赋予引用类型值以后，**可以为这个变量增加属性和方法，也可以改变和删除其属性和方法**，例如："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20\n"
     ]
    }
   ],
   "source": [
    "let person = {};\n",
    "person.age = 20;\n",
    "console.log(person.age);"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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Am1B/IvOOXmFLQVFF8CzRofbRwKh/XNbsPUVS+m7bTdUrHzXao8BokPKcBwFUKAkBeRtTT4AlXEIdOraKsd8tVXa6d9r1dv2miHX4sW/zg6PUQAFBhWQgqILoD5Zv5KXT0q2BVWKozzv27mUvgFRrSiPUQAFalJAaqTchfKNXaBT12E5JrW2bSdwl7PetnGE1HaJVcfvGzvHUAAFKldACoougCKJFEINknJ+e6z9Tz7o4ys2+typO6Kyi+AruBKf/A65DkVR1OI3CqCANQV0rZXaeul3vzaG1MGhcU+pt20fIdei5g6pzXEUQIGOAr6CIq/g20LYL3ZtY/28FEsfiOrieglE5Va89Ce/x3YRZCC+MbTP+fr0xSn98BsFUAAFciggtdK3IRAaj/TR1s4l620bDzU3NCuchwIocFEBXVB+MODfM9Yd6sLnK376+UuFUfcrABkKjXoMvuvIK/M2xilv4Ncx8RgFUAAFllJAauVaIKrHMbXetm2puVpBHqMACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAACqAAChSvQMMPCqDAZhUovkAxABRAARRAgW0rsNkVmIGhAAo0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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 栈内存与堆内存\n",
    "\n",
    "在JavaScript引擎中对变量的存储主要有两种位置：堆内存和栈内存。**栈内存**主要用于存储各种基本类型的变量及其值，包括Boolean、Number、String、Undefined、Null，以及对象变量的指针（指向内存地址的数字），这时候栈内存给人的感觉就像一个线性排列的空间，每个小单元大小基本相等。而**堆内存**主要负责像对象Object这种变量类型的存储。\n",
    "\n",
    "![image.png](attachment:image.png)\n",
    "\n",
    "在上图中可以看出，基本类型值与引用类型值的区别在于存储的内容不同，基本类型变量存储的是具体的值，而引用类型变量存储的是内存地址。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 复制变量值\n",
    "\n",
    "一个变量向另外一个变量复制基本类型的值，会在变量对象上创建一个新值，这两个值是完全独立的。例如："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10 10\n"
     ]
    }
   ],
   "source": [
    "let age1 = 20;\n",
    "let age2 = age1;\n",
    "console.log(age1, age2);\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "21 10\n"
     ]
    }
   ],
   "source": [
    "age1 = 21;\n",
    "console.log(age1, age2);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "但是从一个变量向另外一个变量复制引用类型的值时，是把指向对象在堆内存中的指针地址复制给另外一个变量。这样，这两个变量都会指向引用的这个值对象。当一个变量改变这个对象的值时，另一个变量也会得到改变后的值。例如："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "90\n"
     ]
    }
   ],
   "source": [
    "let student1 = {};\n",
    "let student2 = student1;\n",
    "student1.score = 90;\n",
    "console.log(student2.score);\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 参考资料\n",
    "\n",
    "1. <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Lexical_grammar>\n",
    "1. <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/const>\n",
    "1. <https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/let>"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "幻灯片",
  "kernelspec": {
   "display_name": "Javascript (Node.js)",
   "language": "javascript",
   "name": "javascript"
  },
  "language_info": {
   "file_extension": ".js",
   "mimetype": "application/javascript",
   "name": "javascript",
   "version": "13.13.0"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {
    "height": "187px",
    "width": "306px"
   },
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
